package com.example.demo.controller;

import com.example.demo.readShp.ShapeUtils;
import com.example.demo.util.PackImpl;
import com.example.demo.util.UnPackeUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RestController
public class TestController {

    @Resource
    private PackImpl pack;
    @Value("${file.upload.zip.save.url}")
    private String fileSaveUrl;

    @RequestMapping("fileUpload")
    public synchronized List<List<Map<String, Object>>> fileUpload(MultipartFile file){
        if (file == null) {
            throw new RuntimeException("请上传文件");
        }
        if(!file.getContentType().equals(PackImpl.ZIP_FILE)){
            /**
             * JUnrar不支持rar5，只要压缩时选择rar4就没问题
             * 目前暂时没有Java第三方工具支持rar5，一个解决办法是直接调外部的命令行，调用winrar解压，但是要求宿主机必须安装了winrar（windows/linux/macos）
             * 还有一个办法是在压缩的时候选择rar4，但是winrar默认压缩都是rar5，每次压缩必须都去点一下
             */
            throw new RuntimeException("请上传.zip的压缩包!");
        }
        List<List<Map<String, Object>>> result=new ArrayList<>();
        String filePath = pack.uploadPack(file);
        List<Path> files = UnPackeUtil.getFileByPath(filePath, ".shp");
        files.forEach(f->{
            result.add(ShapeUtils.readFile(f.toString() ,null));
        });
        ShapeUtils.deleteFile(new File(fileSaveUrl));
        return result;
    }


}
